package com.yixun.qfbao.api.service;

import com.yixun.qfbao.apidto.*;
import com.yixun.qfbao.apidto.base.CommonReqDTO;
import com.yixun.qfbao.model.PartnerInfo;
import com.yixun.qfbao.model.dto.PremisesPartnerDto;
import com.yixun.qfbao.xf.model.Premises;
import com.yixun.qfbao.xf.model.PremisesDynamic;
import com.yixun.qfbao.xf.model.dto.PremisesDto;

import java.util.List;
import java.util.Map;

/**
 * [文件名称]<br>
 * PremisesApiService.java<br>
 * <br>
 * [文件描述]<br>
 * premises interface<br>
 * <br>
 * 楼盘接口 2017-11-22<br>
 *
 * @author jzliu
 * @version 1.00
 */
public interface PremisesApiService {

	/**
	 * （2） 驻守楼盘列表
	 *
	 * @param reqDto
	 * @return
	 */
	GetCaseMemberListResDto getCaseMemberList(GetCaseMemberListReqDto reqDto);

	/**
	 * （3） 获取项目
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesListResDto getPremisesList(GetPremisesListReqDto reqDto);

	/**
	 * （4） 经纪人查询楼盘列表
	 *
	 * @param reqDto
	 * @return
	 */
	GetAgentPremisesPageResDto getAgentPremisesPage(GetAgentPremisesPageReqDto reqDto);


	/**
	 * （5） 获取存在规则的项目
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesWithCRResDto getPremisesWithCR(GetPremisesWithCRReqDto reqDto);

	/**
	 * （6） 驻守楼盘分页
	 *
	 * @param reqDto
	 * @return
	 */
	GetCaseMemberPageResDto getCaseMemberPage(GetCaseMemberPageReqDto reqDto);

	/**
	 * （8） 经纪人已驻守楼盘
	 *
	 * @param reqDto
	 * @return
	 */
	GetBindPremisesResDto getBindPremises(GetPartnerBindPremisesReqDto reqDto);

	/**
	 * （9） 经纪人未驻守楼盘
	 *
	 * @param reqDto
	 * @return
	 */
	GetPartnerUnBindPremisesResDto getPartnerUnBindPremises(GetPartnerBindPremisesReqDto reqDto);

	/**
	 * （10） 经纪人驻守楼盘
	 *
	 * @param reqDto
	 * @return
	 */
	BindPartnerToPremisesResDto bindPartnerToPremises(BindPartnerToPremisesReqDto reqDto);

	/**
	 * （11） 楼盘新增
	 *
	 * @param reqDto
	 * @return
	 */
	AddOrEditPremisesResDto addPremises(AddOrEditPremisesReqDto reqDto);

	/**
	 * （12） 楼盘修改
	 *
	 * @param reqDto
	 * @return
	 */
	AddOrEditPremisesResDto editPremises(AddOrEditPremisesReqDto reqDto);

	/**
	 * （13） 楼盘审核
	 *
	 * @param reqDto
	 * @return
	 */
	AuditPremisesResDto auditPremises(AuditPremisesReqDto reqDto);

	/**
	 * （13） 楼盘审核
	 *
	 * @param reqDto
	 * @return
	 */
	ChangeShelvesStatusResDto changeShelvesStatus(ChangeShelvesStatusReqDto reqDto);

	/**
	 * （14） 楼盘交易状态变更
	 *
	 * @param reqDto
	 * @return
	 */
	ChangePremisesSaleStatusResDto changePremisesSaleStatus(ChangePremisesSaleStatusReqDto reqDto);

	/**
	 * （15） 楼盘指定分销商
	 *
	 * @param reqDto
	 * @return
	 */
	AssignPremisesAgentResDto assignPremisesAgent(AssignPremisesAgentReqDto reqDto);

	/**
	 * 获取楼盘id集合
	 *
	 * @param partnerInfo
	 * @return
	 */
	List<Long> getPremisesIdsList(PartnerInfo partnerInfo);

	/**
	 * 查询列表
	 *
	 * @param entity
	 *            搜索条件
	 * @return 分页记录
	 */
	List<Premises> selectListByDto(PremisesDto entity);

	/**
	 * （16） 楼盘明细
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesDetailResDto getPremisesDetail(GetPremisesDetailReqDto reqDto);

	/**
	 * （18） 楼盘是否有效
	 *
	 * @param reqDto
	 * @return
	 */
	CheckPremisesValidResDto checkPremisesValid(CheckPremisesValidReqDto reqDto);

	/**
	 * （19） 楼盘动态分页
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesDynamicPageResDto getPremisesDynamicPage(GetPremisesDynamicPageReqDto reqDto);

	/**
	 * （21） 楼盘动态新增
	 *
	 * @param reqDto
	 * @return
	 */
	AddOrEditPremisesDynamicResDto addPremisesDynamic(AddOrEditPremisesDynamicReqDto reqDto);

	/**
	 * （22） 楼盘动态修改
	 *
	 * @param reqDto
	 * @return
	 */
	AddOrEditPremisesDynamicResDto editPremisesDynamic(AddOrEditPremisesDynamicReqDto reqDto);

	/**
	 * （23） 楼盘动态详情
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesDynamicDetailResDto getPremisesDynamicDetail(GetPremisesDynamicDetailReqDto reqDto);

	/**
	 * （25） 楼盘户型图
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesHxtResDto getPremisesHxt(GetPremisesHxtReqDto reqDto);

	/**
	 * 获取楼盘城市列表
	 *
	 * @param getPremisesCityListReqDto
	 * @return
	 * @throws Exception
	 */
	GetPremisesCityListResDto getPremisesCityListService(GetPremisesCityListReqDto getPremisesCityListReqDto)
			throws Exception;

	/**
	 * 获取楼盘所在城市
	 *
	 * @param getPremisesGroupByCityReqDto
	 * @return
	 * @throws Exception
	 */
	GetPremisesGroupByCityResDto getPremisesGroupByCity(GetPremisesGroupByCityReqDto getPremisesGroupByCityReqDto)
			throws Exception;

	/**
	 * 楼盘刪除
	 *
	 * @param reqDto
	 * @return
	 */
	DeletePremisesResDto deletePremises(DeletePremisesReqDto reqDto);

	/**
	 * 楼盘列表
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesPageResDto getPremisesPage(GetPremisesPageReqDto reqDto);

	/**
	 * @description 设置佣金获取项目信息
	 * @author sangtao
	 * @date 2017/12/5
	 * @param dto
	 **/
	GetPremisesForRuleResDto getPremisesForRule(GetPremisesForRuleReqDto dto);

	/**
	 * 获取分销商楼盘动态
	 *
	 * @author xiaojin.li
	 * @date 2017年12月11日下午5:01:49
	 * @param dto
	 * @return
	 */
	GetAgentPremisesDynamicPageResDto getAgentPremisesDynamicPage(GetAgentPremisesDynamicPageReqDto dto);

	/**
	 * 根据楼盘Id获取当前楼盘接收电话的人员信息
	 * @return
	 */
	Map<Long, PartnerInfo> getPhoneCaseMemberInfoByPremisesInfo(List<Long> premisesIds);
	
	/**
	 * 根据楼盘动态Id获取楼盘动态信息
	 * @return
	 */
	public PremisesDynamic getAgentPremisesDynamicDetail(Long premisesDynamicId);
	/**
	 * 根据登录人公司ID获取楼盘列表
	 *
	 * @param getPremisesListByCompanyIdReqDto
	 * @return
	 * @throws Exception
	 */
	GetPremisesListByCompanyIdResDto getPremisesListByCompanyId(
			GetPremisesListByCompanyIdReqDto getPremisesListByCompanyIdReqDto) throws Exception;

	/**
	 * 判断是否M2楼盘
	 *
	 * @param dto
	 * @return
	 */
	GetChooseM2PremisesFlagResDto getChooseM2PremisesFlag(GetChooseM2PremisesFlagReqDto dto);

	/**
	 * 一二手联动获取楼盘信息
	 *
	 * @param dto
	 * @return
	 */
	GetPremisesForOtherResDto getPremisesListForOther(GetPremisesForOtherReqDto dto);

	/**
	 * 一二手联动获取楼盘详情
	 *
	 * @param dto
	 * @return
	 */
	GetPremisesDetailForV10ResDto getPremisesDetailForV10(GetPremisesDetailForV10ReqDto dto);

	/**
	 * 查询开发商楼盘列表
	 *
	 * @param reqDto
	 * @return
	 */
	GetDevPremisesPageResDto getDevPremisesPage(GetDevPremisesPageReqDto reqDto);

	/**
	 * （16） 楼盘批量指定分销商
	 *
	 * @param reqDto
	 * @return
	 */
	BatchAssignPremisesAgentResDto batchAssignPremisesAgent(BatchAssignPremisesAgentReqDto reqDto);

	/**
	 * 一二手联动楼盘城市首字母分组
	 *
	 * @param reqDto
	 * @return
	 */
	GetPremisesCityResDto getPremisesCity(GetPremisesCityReqDto reqDto);

	/**
	 * 楼盘城市首字母分组
	 * @param currentCity 当前城市
	 * @param premisesDto
	 * @return
	 */
	GetPremisesCityResDto getPremisesCityGroupByPinyin(String currentCity, PremisesDto premisesDto);

	/**
	 * 分销商楼盘列表
	 * @param reqDto
	 * @return
	 */
	GetPremisesListPageResDto getPremisesListPage(GetPremisesListPageReqDto reqDto);

	GetPremisesCityGroupListResDto getPremisesCityGroupListService(
			GetPremisesCityGroupListReqDto getPremisesCityGroupListReqDto) throws Exception;

	/**
	 * 楼盘相册
	 * @param premisesId
	 * @return
	 */
	GetPremisesPhotoResDto getPremisesPhotoList(Long premisesId);

	/**
	 * 获得楼盘户型
	 * @param premisesId
	 * @return
	 */
	GetPremisesHuxingResDto getPremisesHuxingList(Long premisesId);

	/**
	 * 获取楼盘驻场人员
	 * @param reqDto
	 * @return
	 */
	GetPremisesCMSmsPageResDto getPremisesCMSmsPage(GetPremisesCMSmsPageReqDto reqDto);

    /**
     * 楼盘排序
     * @param reqDto
     * @return
     */
	SetPremisesOrderResDto setPremisesOrder(SetPremisesOrderReqDto reqDto);

    /**
     * 校验楼盘名称是否重复
     * @param reqDto1
     * @return
     */
    CheckPremisesNameResDto checkPremisesName(CheckPremisesNameReqDto reqDto1);
	/**
	 * 设置主推楼盘 或取消
	 * @param reqDto
	 * @return
	 */
	SetMainPushPremisesResDto setMainPushPremises(SetMainPushPremisesReqDto reqDto);

    /**
     * 获取楼盘分类统计
     * @param commonReqDTO
     * @return
     */
    PremisesTypeCountResDto premisesTypeCount(CommonReqDTO commonReqDTO);

	/**
	 * 推送微信消息
	 * @param agencyAccessToken
	 * @param companyUuid
	 * @param domain
	 * @param premisesId
	 * @param oldSaleStatus
	 * @param newSaleStatus
	 * @param auditStatus
	 */
	void sendWeixinMsgWithPremises(String agencyAccessToken, String companyUuid, String domain, String premisesId,String oldSaleStatus,String newSaleStatus,String auditStatus);

	/**
	 * 楼盘审核操作推送消息，在售审核成功 上架消息，在售审核失败下架消息
	 * @param agencyAccessToken
	 * @param companyUuid
	 * @param domain
	 * @param premisesId
	 * @param oldAuditStatus
	 * @param newAuditStatus
	 * @param saleStatus
	 */
	void sendWeixinMsgWithPremisesAudit(String agencyAccessToken, String companyUuid, String domain, String premisesId,String oldAuditStatus,String newAuditStatus,String saleStatus);

	/**
	 * 批量指定分销商
	 * @param premsiesId
	 * @param agentIds
	 * @param agencyAccessToken
	 * @param companyUuid
	 * @param domain
	 */
	void sendWeixinMsgWithBatchAssignPremises(Long premsiesId,String agentIds,String agencyAccessToken, String companyUuid, String domain);

    SearchCount4CustomerAndPremisesResDto searchCount4CustomerAndPremises(SearchCount4CustomerAndPremisesReqDto searchCount4CustomerAndPremisesReqDto);

	GetAgentPremisesPageResDto getAgentPremisesHistoryPage(GetAgentPremisesPageReqDto reqDto);

	/**
	 *  查询楼盘集合，根据用户的权限
	 * @param reqDto
	 * @return
	 */
	GetBindPremisesResDto getPremisesListForPartner(GetPartnerBindPremisesReqDto reqDto);

	/**
	 * 根据楼盘状态获取楼盘列表
	 * @param reqDto1
	 * @return
	 */
	GetBindPremisesResDto getPremisesListBySatus(GetPartnerBindPremisesReqDto reqDto1);

	/**
	 * 根据省份市区、楼盘名称查找楼盘列表
	 * @param dto
	 * @return
	 */
	GetAgentPremisesPageResDto getAgentPremisesList(GetAgentPremisesPageReqDto dto);
	
	/**
	 * 楼盘关注
	 * @param premisesAttetionDto
	 * @return
	 */
	String updatePremisesPartnerRel(PremisesPartnerDto premisesAttetionDto);

}
